扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
但是,就算是Java提供了这种优异的机制,如果不能正确地运用就没有任何意义。经常发生的错误有如下几种情况。
• 异常交给上一层类了,但是异常的详细内容却被隐藏了。IOException,SQLException等异常只被上一层的Error,Throwable,Exception接收,但是错误的详细内容却被隐藏了。
• Catch中是空的(未作任何处理)。
为了不要发生这样的对异常的不当处理,需要使catch到的异常都能交给与该异常相应的类去处理。超类是不能处理catch块中的异常种类的。另外,不允许用空的catch块来处理异常。必须编写适当的异常处理,以便了解异常是如何发生的。
例:读入文件时的异常处理
try { reader = new BufferedReader( new FileReader(file)); reader.read(); } catch (Throwable t) { // ERROR: 错误的详细信息被隐藏了 // 记述错误处理 } finally{ try{ reader.close(); } catch(IOException ioe) { //ERROR: catch块中什么也没写 } } 修正例: try { reader = new BufferedReader( new FileReader(file)); reader.read(); } catch (FileNotFoundExceptionfnfe) { // OK: catch了想定的异常 // 记述错误处理 } catch (IOException ioe1) { // OK: catch了想定的异常 // 记述错误处理 } finally{ try{ reader.close(); } catch(IOException ioe) { // 记述错误处理 // OK:写了异常处理 } } |
补充说明: 异常类的分类
异常类以Throwable为基类按如下方式分类。在实现代码内如果不加以捕捉就会导致编译错误的异常是Exception类的子类(但是不包括RuntimeException类的子类)。
① Error类的子类
无法处理,或者不应该处理的异常 • Java.laERROR.OutOfMemoryError //内存不足
• Java.laERROR.StackOverflowError //StackOverflow ② Exception类的子类RuntimeException的子类以外的子类 • Java.io.IOException //输入输出错误 • Java.io.FileNotFoundException //找不到文件(IOException的子类) • Java.sql.SQLException //DB访问异常 ③ RuntimeException类的子类 |
• Java.laERROR.ArrayIndexOutOfBoundsException //数组下标错误 • Java.laERROR.IllegalArgumentException //参数值错误 • Java.laERROR.NullPointerException //访问空指针错误 |
婵″倹鐏夐幃銊╂姜鐢瓕鎻╅崚鍥╂畱閹厖绨$憴顤廡妫板棗鐓欓張鈧弬棰侀獓閸濅椒绗岄幎鈧張顖欎繆閹垽绱濋柇锝勭疄鐠併垽妲勯懛鎶姐€婄純鎴炲Η閺堫垶鍋栨禒璺虹殺閺勵垱鍋嶉惃鍕付娴f娊鈧柨绶炴稊瀣╃閵嗭拷